import urllib.request
import os
import time

from bs4 import BeautifulSoup

from mx.settings import BASE_DIR,MEDIA_ROOT


# os.path.isdir(path) # 判断是否为目录
# os.path.isfile(path) # 判断是否是文件
# os.path.getsize(filename="123.txt") # 返回文件的大小
# os.path.exists(path)::判断是否存在文件或目录
# os.path.abspath(name):获得绝对路径
# os.path.normpath(path):规范path字符串形式
# os.path.splitext():分离文件名与扩展名
# os.path.join(path,name):连接目录与文件名或目录
# os.path.dirname(path) # 返回路径的目录
# os.path.basename(path) # 返回路径的文件名
# os.listdir("/home/test")返回指定目录下的文件和文件夹
"""
创建文件夹或文件
"""
def createFolder(path):
    path = path.strip()# 去除首位空格
    path = path.rstrip("\\")# 去除尾部 \ 符号
    if not os.path.exists(path):
        # 当父目录不存在的时候会级联创建父目录,而os.mkdir(path)不会
        os.makedirs(path)
        return True
    else:
        return False

"""
删除文件
"""
def delFileByPath(filePath):
    path = os.path.normpath(os.path.join(MEDIA_ROOT,filePath))
    if os.path.isfile(path):
        os.remove(path)


# os.O_RDONLY: 以只读的方式打开
# os.O_WRONLY: 以只写的方式打开
# os.O_RDWR : 以读写的方式打开
# os.O_APPEND: 以追加的方式打开
# os.O_CREAT: 创建并打开一个新文件
# os.O_NONBLOCK: 打开时不阻塞
# os.O_TRUNC: 打开一个文件并截断它的长度为零（必须有写权限）
# os.O_EXCL: 如果指定的文件存在，返回错误
# os.O_SHLOCK: 自动获取共享锁
# os.O_EXLOCK: 自动获取独立锁
# os.O_DIRECT: 消除或减少缓存效果
# os.O_FSYNC : 同步写入
# os.O_NOFOLLOW: 不追踪软链接
# os.O_BINARY          以二进制模式打开文件（不转换）
# os.O_TEXT           以文本的模式打开文件（转换）
# os.O_NOINHERIT        阻止创建一个共享的文件描述符
# os.O_SHORT_LIVED
# os.O_TEMPORARY        与O_CREAT一起创建临时文件
# os.O_RANDOM         缓存优化,但不限制从磁盘中随机存取
# os.O_SEQUENTIAL   缓存优化,但不限制从磁盘中序列存取
"""
下载网络图片
downloadPic("http://car.autohome.com.cn/pic/series/3154-1.html","gbk",
    {"alt":"2017款 2.5L 蓝天尊崇版","title":"2017款 2.5L 蓝天尊崇版"},".jpg","\\static\\downoad\\img\\")
"""
def downloadPic(targetUrl,decodeType,filterParten,picType,savePath):
    request = urllib.request.Request(
        url = targetUrl,
        headers = {
            #"Accept": 'text/html,application/xhtml+xml,application/xml;q = 0.9,image/webp,*/*;q = 0.8',
            # "Accept-Encoding": 'gzip,deflate,sdch',
            #"Accept-Language": 'zh-CN,zh;q=0.8',
            #"Connection": 'Keep-Alive',
            #"Host": 'car.autohome.com.cn',
            "User-Agent": 'Mozilla/5.0(Windows NT 6.1;WOW64) AppleWebKit/537.36(KHTML,like Gecko) Chrome/45.0.2454.101  Safari/537.36'
        }
    )
    response = urllib.request.urlopen(request,timeout=20)
    # print(response.info())
    if response.getcode() == 200:
        # 创建文件夹
        path = BASE_DIR + savePath + time.strftime("%Y-%m-%d", time.localtime())
        createFolder(path)
        # 读取并解码
        response_content = response.read().decode(decodeType)
        # 创建BeautifulSoup对象
        soup = BeautifulSoup(response_content,"html.parser")
        imgs = soup.find_all("img", attrs=filterParten)
        #
        for index in range(0, len(imgs)):
            # print(imgs[index].get("src"),imgs[index].get("alt"))
            # print(imgs[index])
            response_img = urllib.request.urlopen(imgs[index].get("src"))
            img = response_img.read()
            fd = os.open(path + "\\" + imgs[index].get("alt") + str(index) + picType,
                         os.O_CREAT | os.O_RDWR | os.O_BINARY)
            os.write(fd,img)
            os.close(fd)
    else:
        print("请求失败...")





